
/**
 * @author zyj
 * @date 2022年06月06日 10:03
 */
public class ThreadDemo1 {
    public static void main(String[] args) {

        //继承Thread,重写run方法
        //线程如果咱们没有设置线程名，线程有一个默认的线程名
        //Thread-i
        // 自定义线程名称
        //1、通过构造方法来给定线程名称，这个线程对象创建出来
        //以后，线程名称就是咱们自定义的名称
        MyThread1 thread = new MyThread1("线程A");
        //启动线程
        //虽然咱们启动线程成功以后，线程执行的代码就是run方法，但是咱们启动线程不能直接调用run方法
        //而是通过start()来开启线程，如果你通过线程类对象去调用run方法，并不是开启一个线程
        //而是在主线程里面调用方法。
//        thread.run();
        thread.start();//开启线程
        MyThread1 thread1 = new MyThread1();
        // 通过setName来设置县线程名称一定在开始线程之前去设置
        thread1.setName("线程B");
//        thread1.start();
        System.out.println(Thread.currentThread().getName());
        //线程API
        //static native Thread currentThread() 获取当前正在执行的线程对象
        //boolean isAlive() 判断线程是否还活着
        //sleep(long millis) 线程休眠millis毫秒
        //getId()获取线程的唯一标识
        try {
            Thread.sleep(5000);
            thread1.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("线程A：" + thread.isAlive());
        System.out.println(thread.getId());
        System.out.println(thread1.getId());
    }


}

class MyThread1 extends Thread{

    private boolean flag = false;
    public MyThread1(){

    }
    public MyThread1(String name){
        super(name);
    }
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


}
